go 闭包函数

闭包函数(Closure)是指一个函数值(函数对象)捕获并绑定了其所在的词法环境(包括函数内部定义的变量)的函数。换句话说,闭包函数可以访问并操作其外部函数作用域中的变量,即使外部函数已经执行完毕

  1. 闭包函数可以访问并修改其外部函数作用域中的变量。这是因为闭包函数在创建时会捕获(Capture)其外部函数作用域中的变量的引用,而不是简单地复制变量的值。因此,即使外部函数已经返回,闭包函数仍然可以访问和修改这些变量
  2. 闭包函数可以作为值传递、存储和调用。我们可以将闭包函数赋值给变量,将其作为参数传递给其他函数,或者将其作为返回值返回。
func adder() func(int) int {
	sum := 0
	return func(x int) int {
		sum += x
		return sum
	}
}

func main() {
	add := adder()

	fmt.Println(add(1))  // 输出:1
	fmt.Println(add(2))  // 输出:3
	fmt.Println(add(3))  // 输出:6
}